<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        // indexOf方法，也是用来找下标
        // 为什么不用indexOf？因为对于基本数据类型数组，indexOf可以用，复杂类型不可以用

        /*
        // 基本类型就是判断数据是否相等
        console.log( 10 == 10) // true 
        // 复杂类型判断的是地址
        // 写一个 {} 其实相当于是 new Object()
        console.log( {} == {} ) // false
        // console.log( new Object() == new Object() ) // false

        // 因为也是不同的空间，只是说这两个空间内容长得一样
        console.log( {name: 'jack', age: 16} == {name: 'jack', age: 16} ) // false
        */

        // 基本数据类型的数组
        // let nums = [10,20,30,40]
        // let idx = nums.indexOf(20)
        // console.log(idx) // 1

        // let arr = [
        //     { id: 1, name: 'jack', age: 16 },
        //     { id: 2, name: 'rose', age: 15 },
        // ]
        // // 即使这个对象的代码是复制的，那也没用，因为也相当于是创建一个新的对象
        // // 所以你拿一个新的对象去数组里找，能找到吗？绝对找不到
        // // 所以这就是上面说的，indexOf用来找基本类型好用，找复杂类型，不好用
        // let idx = arr.indexOf({ id: 1, name: 'jack', age: 16 })
        // console.log(idx) // -1


        // 以后建议找基本类型用indexOf，找复杂类型用findIndex


        // findIndex也会像forEach一样遍历
        let arr = [
            { id: 1, name: 'jack', age: 16 },
            { id: 2, name: 'rose', age: 15 },
            { id: 3, name: 'andy', age: 19 },
        ]
        // let idx = arr.findIndex(v => {

        //     console.log(v)
        //     // 这个方法里如果return true就代表找到了
        //     // 所以不会再往下遍历，然后返回值就是找到的当前下标
        //     // 如果一致没返回true，就代表找不到，得到-1
        //     if (v.id == 2) {
        //         return true
        //     }
        // })

        // 优化
        let idx = arr.findIndex(v => v.id == 2)

        console.log(idx) // 1
    </script>
</body>

</html>